package com.zzw.springboot.controller;

import com.zzw.springboot.util.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * @author 赵志伟
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class BaseController {
    /**
     * 通用导入功能
     * @param file 上传的Excel文件
     * @param entityType 导入的实体类型（用于日志记录）
     * @return 导入结果消息
     */
    @PostMapping("/common/import")
    @ResponseBody
    public Result importData(@RequestParam(value = "file") MultipartFile file,
                          @RequestParam(value = "entityType", required = false, defaultValue = "data") String entityType) {
        // 检查文件是否为空
        if (file.isEmpty()) {
            return Result.error("请选择文件");
        }

        // 检查文件类型
        String fileName = file.getOriginalFilename();
        if (fileName == null || !(fileName.endsWith(".xls") || fileName.endsWith(".xlsx"))) {
            return Result.error("请上传Excel文件");
        }

        try {
            // 实际项目中，这里应该实现Excel文件解析和批量导入
            // 可以根据entityType决定使用哪个服务来处理数据
            System.out.println("正在导入" + entityType + "...");

            // 返回导入成功的信息
            return Result.success("导入成功").add("entityType", entityType).add("successCount", 0);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("导入失败：" + e.getMessage());
        }
    }

    /**
     * 通用导出功能
     * @param response HTTP响应对象
     * @param entityType 导出的实体类型
     * @param searchParams 搜索参数（可选）
     */
    @GetMapping("/common/export")
    public void exportData(HttpServletResponse response,
                           @RequestParam(value = "entityType", required = false, defaultValue = "data") String entityType,
                           @RequestParam(required = false) Map<String, Object> searchParams) {
        try {
            // 设置响应头
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            String fileName = entityType + "_export.xlsx";
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);

            // 实际项目中，这里应该实现查询条件和Excel文件导出功能
            // 可以根据entityType和searchParams查询数据并生成Excel
            System.out.println("正在导出" + entityType + "...");
            System.out.println("搜索参数：" + searchParams);

            // 实现导出逻辑...
            // 示例：创建一个空的Excel文件
            response.getOutputStream().write("Excel表格内容".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
